package com.skyd.core.android;

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;

/**
 * 全局共享数据
 * 注意：使用时需要在AndroidManifest.xml中设置application节点的name属性为此类的子类全名称（以下假设为com.skyd
 * .abc.Center），如：
 * <p>
 * &lt;application android:icon=&quot;@drawable/icon&quot;
 * android:label=&quot;@string/app_name&quot;
 * android:name=&quot;com.skyd.abc.Center&quot;&gt;
 * </p>
 * 然后在使用时这样创建：Center c = (Center) getApplicationContext();
 * 
 * @author SkyD
 * 
 */
public abstract class Global extends Application {

	private static final String Label = "CommonSharedPreferences_";
	public static final String FullScreenKey = Label + "FullScreen";
	public static final String KeepScreenOnKey = Label + "KeepScreenOn";
	public static final String FirstRunKey = Label + "FirstRun";
	
	/**
	 * 获取是否设为全屏
	 * 
	 * @return 是否设为全屏
	 */
	public boolean getIsFullScreen() {
		return getSharedPreferences().getBoolean(FullScreenKey, false);
	}

	/**
	 * 设置是否设为全屏
	 * 
	 * @param permission
	 *            共享读写权限,如Context.MODE_WORLD_READABLE、Context.MODE_PRIVATE
	 * @param b
	 *            是否设为全屏
	 */
	public void setIsFullScreen(int permission, boolean b) {
		getSharedPreferences(permission).edit().putBoolean(FullScreenKey, b)
				.commit();
	}

	/**
	 * 获取是否设为保持屏幕常亮
	 * 
	 * @return 是否设为保持屏幕常亮
	 */
	public boolean getIsKeepScreenOn() {
		return getSharedPreferences().getBoolean(KeepScreenOnKey, false);
	}

	/**
	 * 设置是否设为保持屏幕常亮
	 * 
	 * @param permission
	 *            共享读写权限,如Context.MODE_WORLD_READABLE、Context.MODE_PRIVATE
	 * @param b
	 *            是否设为保持屏幕常亮
	 */
	public void setIsKeepScreenOn(int permission, boolean b) {
		getSharedPreferences(permission).edit().putBoolean(KeepScreenOnKey, b)
				.commit();
	}

	/**
	 * 获取是否为首次运行
	 * 
	 * @return 是否为首次运行
	 */
	public boolean getIsFirstRun() {
		return getSharedPreferences().getBoolean(FirstRunKey, true);
	}

	/**
	 * 设置是否为首次运行
	 * 
	 * @param permission
	 *            共享读写权限,如Context.MODE_WORLD_READABLE、Context.MODE_PRIVATE
	 * @param b
	 *            是否为首次运行
	 */
	public void setIsFirstRun(int permission, boolean b) {
		getSharedPreferences(permission).edit().putBoolean(FirstRunKey, b)
				.commit();
	}

	/**
	 * 获取共享数据，用于持久化程序数据
	 * 
	 * @return SharedPreferences对象
	 */
	public SharedPreferences getSharedPreferences() {
		return getSharedPreferences(Context.MODE_PRIVATE);
	}

	/**
	 * 获取共享数据，用于持久化程序数据
	 * 
	 * @param permission
	 *            共享读写权限,如Context.MODE_WORLD_READABLE、Context.MODE_PRIVATE
	 * @return SharedPreferences对象
	 * 
	 */
	public SharedPreferences getSharedPreferences(int permission) {
		return this.getSharedPreferences(getAppKey(), permission);
	}

	/**
	 * 获取应用程序独有标识，通常使用包名
	 * 
	 * @return 应用程序独有标识字串
	 */
	public abstract String getAppKey();
}
